package persistencia;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import util.Conexion;
import bean.Marca;
import bean.Modelo;

public class ModeloDAO {
	
	public List<Modelo> listar() throws SQLException{
		List<Modelo> listado = new ArrayList<Modelo>();
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
				"SELECT id,Modelo,tbiden,orden,situacion,marca " +
				"FROM tbl_Modelo");
		ResultSet rs = pstm.executeQuery();
		while(rs.next()){
			Modelo modelo = new Modelo();
			modelo.setId(rs.getInt("id"));
			modelo.setModelo(rs.getString("modelo"));
			modelo.setTbiden(rs.getString("tbiden"));
			modelo.setSituacion(rs.getString("situacion"));
			modelo.setOrden(rs.getInt("orden"));
			modelo.setMarca(rs.getInt("marca"));
			listado.add(modelo);
		}
		rs.close();
		pstm.close();
		return listado;
	}
	
	public List<Modelo> buscarPorModelo(String filtro,String tipo,String situacion) throws SQLException{
		List<Modelo> listado = new ArrayList<Modelo>();
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
				"SELECT Modelo,tbiden,situacion,id,orden,marca " +
				"FROM tbl_Modelo WHERE situacion in ("+situacion+") and tbiden=? and modelo like ?");
		pstm.setString(1, tipo);
		pstm.setString(2, filtro + "%");
		ResultSet rs = pstm.executeQuery();
		while(rs.next()){
			Modelo modelo = new Modelo();
			modelo.setId(rs.getInt("id"));
			modelo.setModelo(rs.getString("modelo"));
			modelo.setTbiden(rs.getString("tbiden"));
			modelo.setSituacion(rs.getString("situacion"));
			modelo.setOrden(rs.getInt("orden"));
			modelo.setMarca(rs.getInt("marca"));
			listado.add(modelo);
		}
		rs.close();
		pstm.close();
		return listado;
	}
	
	public List<Modelo> buscarPorModelo(String filtro,String tipo) throws SQLException{
		List<Modelo> listado = new ArrayList<Modelo>();
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
				"SELECT Modelo,tbiden,situacion,id,orden,marca " +
				"FROM tbl_Modelo WHERE tbiden=? and modelo = ?");
		pstm.setString(1, tipo);
		pstm.setString(2, filtro);
		ResultSet rs = pstm.executeQuery();
		while(rs.next()){
			Modelo modelo = new Modelo();
			modelo.setId(rs.getInt("id"));
			modelo.setModelo(rs.getString("modelo"));
			modelo.setTbiden(rs.getString("tbiden"));
			modelo.setSituacion(rs.getString("situacion"));
			modelo.setOrden(rs.getInt("orden"));
			modelo.setMarca(rs.getInt("marca"));
			listado.add(modelo);
		}
		rs.close();
		pstm.close();
		return listado;
	}
	
	public List<Modelo> buscarPorOrden(int filtro,String tipo,String situacion) throws SQLException{
		List<Modelo> listado = new ArrayList<Modelo>();
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
				"SELECT Modelo,tbiden,situacion,id,orden,marca " +
				"FROM tbl_Modelo WHERE situacion in ("+situacion+")  and tbiden=? and orden = ?");
		pstm.setString(1, tipo);
		pstm.setInt(2, filtro);
		ResultSet rs = pstm.executeQuery();
		while(rs.next()){
			Modelo modelo = new Modelo();
			modelo.setId(rs.getInt("id"));
			modelo.setModelo(rs.getString("modelo"));
			modelo.setTbiden(rs.getString("tbiden"));
			modelo.setSituacion(rs.getString("situacion"));
			modelo.setOrden(rs.getInt("orden"));
			modelo.setMarca(rs.getInt("marca"));
			listado.add(modelo);
		}
		rs.close();
		pstm.close();
		return listado;
	}
	
	public int insertar(Modelo modelo) throws SQLException{
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
		"insert into tbl_modelo (Modelo,situacion,orden,usuario_creacion,fecha_creacion,tbiden,marca) values (?,?,?,?,?,?,?)",PreparedStatement.RETURN_GENERATED_KEYS);
		pstm.setString(1, modelo.getModelo());
		pstm.setString(2, modelo.getSituacion());
		pstm.setInt(3, modelo.getOrden());
		pstm.setString(4, modelo.getUsuario_creacion());
		pstm.setInt(5, modelo.getFecha_creacion());
		pstm.setString(6, modelo.getTbiden());
		pstm.setInt(7, modelo.getMarca());
		int resultado = pstm.executeUpdate();
		ResultSet rs = pstm.getGeneratedKeys();
		rs.next();
		resultado = rs.getInt(1);
		rs.close();
		pstm.close();
		return resultado;
	}
	
	public int actualizar(Modelo modelo) throws SQLException{
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
		"update tbl_modelo set modelo=?,orden=?,situacion = ?,usuario_modificacion=?,fecha_modificacion=?,tbiden=?,marca=? where id=?");
		pstm.setString(1, modelo.getModelo());
		pstm.setInt(2, modelo.getOrden());
		pstm.setString(3, modelo.getSituacion());
		pstm.setString(4, modelo.getUsuario_modificacion());
		pstm.setInt(5, modelo.getFecha_modificacion());
		pstm.setString(6, modelo.getTbiden());
		pstm.setInt(7, modelo.getMarca());
		pstm.setInt(8, modelo.getId());
		int resultado = pstm.executeUpdate();
		pstm.close();
		return resultado;
	}
	
	public int actualizarFlag(Modelo modelo) throws SQLException{
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
				"update tbl_modelo set marca=? where id=?");
				pstm.setInt(1, modelo.getMarca());
				pstm.setInt(2, modelo.getId());
				int resultado = pstm.executeUpdate();
				pstm.close();
				return resultado;
	}
	
	public List<Modelo> listarInterseccionMarca(String tbiden) throws SQLException{
		List<Modelo> listado = new ArrayList<Modelo>();
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
				"SELECT id,Modelo,tbiden,orden,situacion,marca " +
				"FROM tbl_Modelo where situacion='01' and marca=1 and tbiden=?");
		pstm.setString(1,tbiden);
		ResultSet rs = pstm.executeQuery();
		while(rs.next()){
			Modelo modelo = new Modelo();
			modelo.setId(rs.getInt("id"));
			modelo.setModelo(rs.getString("modelo"));
			modelo.setTbiden(rs.getString("tbiden"));
			modelo.setSituacion(rs.getString("situacion"));
			modelo.setOrden(rs.getInt("orden"));
			modelo.setMarca(rs.getInt("marca"));
			listado.add(modelo);
		}
		rs.close();
		pstm.close();
		return listado;
	}
	
	public List<Modelo> buscarPorMarca(Marca filtro) throws SQLException{
		List<Modelo> listado = new ArrayList<Modelo>();
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
				"SELECT Modelo,tbiden,situacion,id,orden,marca " +
				"FROM tbl_Modelo WHERE replace(Modelo,' ','') = ? and marca=0 and situacion='01' order by orden");
		pstm.setString(1, filtro.getMarca());
		ResultSet rs = pstm.executeQuery();
		while(rs.next()){
			Modelo modelo = new Modelo();
			modelo.setId(rs.getInt("id"));
			modelo.setModelo(rs.getString("modelo"));
			modelo.setTbiden(rs.getString("tbiden"));
			modelo.setSituacion(rs.getString("situacion"));
			modelo.setOrden(rs.getInt("orden"));
			modelo.setMarca(rs.getInt("marca"));
			listado.add(modelo);
		}
		rs.close();
		pstm.close();
		return listado;
	}
	
	public int actualizarPorMarca(String marca) throws SQLException{
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
				"update tbl_modelo set marca=1 where replace(modelo,' ','')=?");
				pstm.setString(1,marca);
				int resultado = pstm.executeUpdate();
				pstm.close();
				return resultado;
	}
}
